“我们聘请 ChatGPT,让它当了一天 ML 工程师”
随着 ChatGPT 的爆火,许多人提出疑问:它究竟是否可以取代人类?于是,面对众说纷纭的答案,本文作者决定:让 ChatGPT 当一天的机器学习工程师,毕竟实践出真理。
原文链接:https://encord.com/blog/we-employed-chatgpt-as-an-ml-engineer-this-is-what-we-learned/
未经授权,禁止转载!
很少有技术像 OpenAI 的 ChatGPT 一样有这么大的魔力,一经发布迅速吸引了公众的吸引力。
ChatGPT 推出两个月就斩获了超过 1 亿用户,堪称史上发展速度最快的公共应用程序。虽然许多人认为 ChatGPT 是技术上的飞跃,但其真正活力并非来自巨大的技术进步(ChatGPT 的基础模型是GPT3,已经存在近 3 年了),而是因为:它是一款真正能够与人类交互的 AI 应用程序。
作为一个 AI 系统,ChatGPT 高调地向世人展示了自己的价值,让公众产生了畏惧。实际上,人工智能已经渗透现代生活的方方面面,但它们大多隐藏在幕后,例如谷歌搜索、Youtube 推荐、垃圾邮件过滤器、身份识别等等。ChatGPT 是为数不多的人造智能工具之一。人工智能已成为众人瞩目的焦点,并因此而催生了大量文章、视频、博客以及播客。
在此次热潮中,人们对于人工智能的进步、人工智能的意识进步、人工通用智能以及技术奇点等的影响产生了新的问题和担忧——然而,我们认为 ChatGPT 不是终结者:这些技术仍在快速发展,我们无法预测其将来的发展方向,更无法预期其广泛的影响。但我们可以通过一些小问题,知微见著,加深对 AI 的理解。
本着这种精神,我们提出了一个问题:能否找到一种途径来验证一个 AI 系统是否可以迭代改进另一个 AI 系统?
我们注意到,目前 AI 进步的主要推动者是从事机器学习的工程师和研究人员。于是,我们想到了一个更具体的问题:ChatGPT 能否成为一名称职的机器学习工程师?
准备工作
为了让 ChatGPT 成为一名机器学习工程师,首先我们来确定该角色应承担的所有职责。机器学习工程师的日常工作包括:
(1)手动检查和探索数据;
(2)训练模型,评估结果;
(3)管理模型的部署以及模型的监控过程;
(4)编写自定义算法和脚本。
综上所述,机器学习工程师必须是一名技术力非常全面的问题解决者。因此,我们打算让这位工程师专注于解决更抽象和更具创造力的问题。
我们将通过以下几个方面缩小 ChatGPT 的职责范围:
(1)专注于研究计算机视觉的模态:我们之所以选择计算机视觉,因为这是我们的专长,同时也是因为作为一种大型语言模型,ChatGPT 在其训练过程中未能直接访问任何视觉媒体。因此,它只能从纯概念的角度来处理这个领域。
(2)探索一个具体的问题:Python 有一个库 pandas,同时我们所有人都很喜欢熊猫,所以我们决定构建一个强大的熊猫检测器。我们将使用开源数据集 YouTube-VOS(https://youtube-vos.org/dataset/)的数据,对这些数据做了标记,而且还故意埋了几个错误。
(3)以数据为中心的方法:我们选择以数据为中心的方法,因为我们发现这种方法通常对实际模型开发的影响力最高。我们可以去除模型和参数选择的大部分复杂性,这样就可以专注于改进提供给模型的训练数据和标签。采用以模型为中心的方法来运行超参数和模型架构虽然很重要,但无法很好地测试 ChatGPT 的抽象推理能力。
(4)使用现有工具:为了进一步简化任务,我们决定避免使用机器学习工程师自己构建的内部工具。因为 ChatGPT 并不能运行 Jupyter Notebook,我们将利用 Encord 平台,通过 Encord 的微模型以及开源工具 Encord Active 运行数据、标签和模型评估来简化模型的训练/推理。运行模型训练的代码如下:
考虑到范围已经缩小了,我们的方法是使用 ChatGPT 通过 Encord Active 编写自定义质量指标,然后运行数据、标签和模型预测来过滤和清理我们的数据。
质量指标是数据、标签和模型的附加参数,从语义上来说,这些是给训练数据加索引以及预测数据的方法,既可以包括一般的属性(例如图像的模糊度),也可以是特定的属性(例如图像中行人之间的平均间距)。
作为机器学习工程师,ChatGPT 的工作是想办法分解和管理我们的标签和数据,以提高下游模型的性能,并通过自定义的质量指标来调节模型。
示例质量指标的代码如下:
这个简单指标计算的是数据集内熊猫的边界盒的纵横比。使用这个指标遍历数据集,我们看到了一种分解数据的方法:
ChatGPT 的目标是找到其他可以用来改进数据的相关指标。
此外,我们必须考虑的最后一点是:作为机器学习工程师,ChatGPT 处于极大的天然劣势,它看不到自己正在处理的数据。它的实现能力也是有限的,虽然 ChatGPT 本身取得了巨大的成功,但也经常会遇到频繁中断和无法响应。
我们可以把 ChatGPT 想象成一名机器学习工程师,身处荒岛之上,wifi 非常糟糕,唯一可以运行的软件是 Slack。因此,我们需要一个中间人。我们将充当 ChatGPT 的眼睛、耳朵和手指,同时也是它在这个项目中的合作伙伴。
流程
根据上述限制,我们制定的策略如下:
1. 在随机采样数据上,运行初始基准模型;
2. 要求 ChatGPT 提出改进数据和标签选择过程的想法;
3. 让 ChatGPT 编写自定义质量指标来实例化这些想法;
4. 在改进的数据上训练新模型;
5. 评估并比较模型。
我们利用以数据为中心的方法,限制 ChatGPT 的试验变量只能是这些质量指标。所有模型和超参数都将保持不变。总结一下:
相较于 OpenAI 服务器上的神经网络,作为人类,我们的优势之一是可以直接查看数据。只需用目光扫视一下,很快就可以发现标签错误(我们有意引入)。在这个过程中,我们尽可能将我们看到的问题传达给 ChatGPT,为其解决方案提供足够的背景信息。下面是一些示例数据:
还有一些明显的标签错误:
基准
做好一切准备工作,下面我们来运行初始模型,为 ChatGPT 的工作建立基准。我们随机抽取 25% 的训练数据集样本,并用这些数据训练模型。我们的初步结果:平均准确率为 0.595,平均召回率为 0.629。
下面,我们问一问 ChatGPT 下一步该怎么办。
用 ChatGPT 处理机器学习
我们以上述基准测试集为基础,与 ChatGPT 就如何使用质量指标改进我们的数据集进行了探讨。我们的第一种方法是提供问题的高级描述,并引出初步建议。
在经过几个来回的讨论后,我们与 ChatGPT 进行了一场富有成效的头脑风暴会议:
到这里,我们已经有了一些有趣的想法。为了汲取更多想法,我们与 ChatGPT 进行了一系列长时间的对话,期间还与它玩了一会儿小游戏。
在经过几次互动(并建立了稳固的融洽关系)之后,我们来回顾一下 ChatGPT 提出的一些建议:
(1)对象相似度:参数化边界盒内熊猫到边界盒的平均距离。如果熊猫彼此之间离得很近,我们就可以利用这个参数防止对象检测模型感到迷惑。
(2)对象置信度分数:这是一个标准方法,指的是使用现有模型对标签的置信度等级进行排名。
(3)对象计数:这是一个简单的指标,在边界盒中的熊猫数量有可能影响到模型精度的情况下使用。
(4)边界盒的紧密性:计算边界盒内轮廓的纵横比与边界盒本身的纵横比的偏差,以衡量边界盒是否紧紧围绕对象。
除了指标方面的想法外,我们还需要 ChatGPT 提出如何在实践中使用这些指标的建议。
数据选择:
我们来问问 ChatGPT,对于如何利用指标来提高数据质量,它有何看法。
标签错误:
我们还询问了当指标发现潜在的标签错误时该怎么办。
总结一下,针对如何改进我们的模型,ChatGPT 给出如下一系列具体的策略:
(1)数据分层:使用指标对数据集进行分层,以实现平衡。
(2)删除错误:删除指标找出来的训练数据中的错误标记。
(3)重新标记:重新标记有错误的标签。
到这里为止,我们在 ChatGPT 的帮助下制定了一系列可操作的指标和策略。下一个问题是:
ChatGPT 真的可以实现这些解决方案吗?
下一步是让 ChatGPT 将以上想法实例化为自定义指标。我们来试试输入一些示例指标代码和 Encord Active 文档中给出的示例指标说明:
从表面来看,结果还不错。我们运行了 ChatGPT 建议的各种其他指标,并找到了看似合理的代码片段。将这些指标插入 Encord Active,运行后得到的结果如下:
不过似乎我们还需要一些改进,来问问 ChatGPT 有没有好办法:
虽然刷新了很多次,但我们依然没有得到响应。ChatGPT 就像一个不可靠的同事,编写了错误的代码,而且还消失了——此处还是需要人工干预。经过大量手动调试后,ChatGPT 的指标终于可以运行了。现在我们回头去实现它的建议。
与其他数据科学建议一样,关键是针对各个想法进行多次迭代。我们需要运行多个 ChatGPT 指标,并求结果的平均值。但为了简洁起见,此处我们仅尝试它建议的过滤策略。
结果
我们使用 ChatGPT 的指标和策略进行了多项实验,可以通过这些指标查看 ChatGPT 的模型性能。
使用以数据为中心的指标驱动方法后,与我们的随机样本相比,ChatGPT 给出的指标建议的平均精度提高了 10.1%,召回率提高了 34.4%。
虽然 ChatGPT 不是一位完美的伙伴,但它在构思合理的指标方面有着优异的表现,它提出的想法大幅改进了我们的熊猫检测器。那么,ChatGPT 会是下一个 Geofrey Hinton(反向传播算法和对比散度算法的发明人之一,也是深度学习的积极推动者,被誉为“深度学习之父”)吗?
不可能。ChatGPT 给出的代码需要大量的人工干预才能运行,而且整个对话过程背后有人类的正确判断,这一点不可忽视。事实上,最成功的指标,也就是对减少标签错误和提高模型性能方面影响最大的指标,很大程度上受到了人类建议的影响:
上述“边界盒的紧密性”指标是通过一系列提示和响应得出的。最后得出这样的结论,不能完全归功于 ChatGPT,其中也离不开人为因素。
此外,ChatGPT 也错失了一些针对性很强的简单指标,比如人类在判断熊猫时,一个很明显的观察因素是它们是黑白色的,判断标签是否错误的最直接指标就是边界盒中白色和黑色像素与总像素数的比值。如果这个指标很低,则表明边界盒没有紧密贴近熊猫。尽管对人类来说,这个指标显而易见,但我们尽了最大努力,依然未能引导 ChatGPT 提出这样的想法。
总结
总的来说,ChatGPT 对计算机视觉有着深刻的理解。遇到陌生的问题和框架,它能够提出有用的建议和初始模板的代码片段。在它的帮助下,我们成功改进了我们的熊猫检测器——无需从头创建代码模板,也可以加快人类机器学习工程师的迭代周期。
然而,ChatGPT 缺乏在没有指导的情况下建立自己想法和结论的能力,它无法通过集中推理深入研究问题的特殊性。
对人类来说,洞察力来自多年的经验和积累,但 ChatGPT 似乎还没有发展出这样的能力,它仍然依赖于其他工程师的指导。虽然它拥有机器学习思想和策略,但不具备独立机器学习工程师的深度认知能力。
所以,我们可以利用 ChatGPT 来改进 AI 系统吗?可以。
我们会聘请它作为独立的机器学习工程师吗?不会。
让我们等到 GPT4 问世,再来试试看吧!